import java.util.LinkedList;

public class test3 {
    public static void main(String[] args) {
        int n = 5; // 总人数
        int k = 2; // 报数到 k 的人被淘汰

        josephus(n, k);
    }

    public static void josephus(int n, int k) {
        // 创建一个链表来表示围成圈的人
        LinkedList<Integer> people = new LinkedList<>();
        for (int i = 1; i <= n; i++) {
            people.add(i);
        }

        System.out.println("淘汰顺序如下：");
        int current = n - 1; // 从编号为 n 的人开始（链表索引为 n-1）

        while (!people.isEmpty()) {
            // 计算要淘汰的人的位置
            for (int i = 1; i < k; i++) {
                current = (current - 1 + people.size()) % people.size();
            }

            // 淘汰当前位置的人
            int eliminated = people.remove(current);
            System.out.println("淘汰的人是：" + eliminated);

            // 如果链表不为空，更新当前位置为被淘汰人的前一个人
            if (!people.isEmpty()) {
                current = (current - 1 + people.size()) % people.size();
            }
        }
    }
}    